// com.easy.config.CorsConfig
package com.easy.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;

import java.util.List;
//跨域预检
@Configuration
//这个 CorsConfig 类的主要作用是配置并启用跨域请求支持，
// 允许来自特定源（前端应用）的请求访问后端 API，
// 同时控制哪些 HTTP 方法、头部信息等可以被跨域使用。
public class CorsConfig {
    @Bean
    public CorsFilter corsFilter() {
        //创建配置对象
        CorsConfiguration cfg = new CorsConfiguration();
        //允许携带凭证（如 cookies、认证信息）
        cfg.setAllowCredentials(true);
        //配置允许的源（前端地址）只允许来自这个网址的请求
        cfg.setAllowedOriginPatterns(List.of("http://localhost:8888"));
        //配置允许的请求头
        //允许跨域请求携带这些特定的 HTTP 头部
        //Authorization: 用于身份验证令牌（如 JWT）
        //Content-Type: 指定请求体的媒体类型
        //X-Requested-With: 标识 AJAX 请求
        cfg.setAllowedHeaders(List.of("Authorization", "Content-Type", "X-Requested-With"));
        //配置允许的 HTTP 方法
        cfg.setAllowedMethods(List.of("GET","POST","PUT","DELETE","PATCH","OPTIONS"));
        //配置暴露的响应头
        cfg.setExposedHeaders(List.of("Authorization"));
        //配置预检请求缓存时间
        cfg.setMaxAge(3600L);

        //注册配置并创建过滤器
        //创建一个基于 URL 的 CORS 配置源
        //
        //将 CORS 配置应用到所有路径（/**）
        //
        //返回一个 CorsFilter bean，该过滤器会处理所有传入请求并添加适当的 CORS 头
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", cfg);
        return new CorsFilter(source);
    }
}

